/*
*********************************************************************************************************
*                                            EXAMPLE CODE
*
*               This file is provided as an example on how to use Micrium products.
*
*               Please feel free to use any application code labeled as 'EXAMPLE CODE' in
*               your application products.  Example code may be used as is, in whole or in
*               part, or may be used as a reference only. This file can be modified as
*               required to meet the end-product requirements.
*
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                  HTTP CLIENT MEMORY LIBRARY MODULE
*
* Filename : http-c_mem.h
* Version  : V3.01.01
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*********************************************************************************************************
*                                               MODULE
*********************************************************************************************************
*********************************************************************************************************
*/

#ifndef  HTTPc_MEM_MODULE_PRESENT
#define  HTTPc_MEM_MODULE_PRESENT

#if (HTTPc_CFG_MEM_MODULE_EN == DEF_ENABLED)
#define HTTPc_MEM_MODULE_EN
#endif

#ifdef   HTTPc_MEM_MODULE_EN


/*
*********************************************************************************************************
*********************************************************************************************************
*                                            INCLUDE FILES
*********************************************************************************************************
*********************************************************************************************************
*/

#include  <cpu.h>
#include  <cpu_core.h>

#include  <lib_def.h>
#include  <lib_str.h>
#include  <lib_ascii.h>

#include  <http-c_cfg.h>
#include  <Common/http.h>
#include  <Client/Source/http-c.h>


/*
*********************************************************************************************************
*********************************************************************************************************
*                                               EXTERNS
*********************************************************************************************************
*********************************************************************************************************
*/

#ifdef HTTPc_MEM_MODULE
#define  HTTPc_MEM_EXT
#else
#define  HTTPc_MEM_EXT  extern
#endif


/*
*********************************************************************************************************
*********************************************************************************************************
*                                                DEFINES
*********************************************************************************************************
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*********************************************************************************************************
*                                              DATA TYPES
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                       HTTPc MEM ERR DATA TYPE
*********************************************************************************************************
*/

typedef enum httpc_mem_err {
    HTTPc_MEM_ERR_NONE,

    HTTPc_MEM_ERR_POOL_INIT_CONN,
    HTTPc_MEM_ERR_POOL_INIT_BUF,
    HTTPc_MEM_ERR_POOL_INIT_REQ,
    HTTPc_MEM_ERR_POOL_INIT_RESP,

    HTTPc_MEM_ERR_POOL_CONN_EMPTY,
    HTTPc_MEM_ERR_POOL_CONN_FAULT,
    HTTPc_MEM_ERR_POOL_CONN_FREE,

    HTTPc_MEM_ERR_POOL_BUF_EMPTY,
    HTTPc_MEM_ERR_POOL_BUF_FAULT,
    HTTPc_MEM_ERR_POOL_BUF_FREE,

    HTTPc_MEM_ERR_POOL_REQ_EMPTY,
    HTTPc_MEM_ERR_POOL_REQ_FAULT,
    HTTPc_MEM_ERR_POOL_REQ_FREE,

    HTTPc_MEM_ERR_POOL_RESP_EMPTY,
    HTTPc_MEM_ERR_POOL_RESP_FAULT,
    HTTPc_MEM_ERR_POOL_RESP_FREE,

} HTTPc_MEM_ERR;


/*
*********************************************************************************************************
*                                       HTTPc MEM CFG DATA TYPE
*********************************************************************************************************
*/

typedef struct httpc_mem_cfg {
    CPU_INT08U  ConnNbrMax;
    CPU_INT08U  ReqNbrMax;
    CPU_INT16U  BufSize;
} HTTPc_MEM_CFG;


/*
*********************************************************************************************************
*********************************************************************************************************
*                                           GLOBAL VARIABLES
*********************************************************************************************************
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*********************************************************************************************************
*                                                MACROS
*********************************************************************************************************
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*********************************************************************************************************
*                                          FUNCTION PROTOTYPES
*********************************************************************************************************
*********************************************************************************************************
*/

void             HTTPcMem_PoolInit    (const  HTTPc_MEM_CFG  *p_cfg,
                                              HTTPc_MEM_ERR  *p_err);

HTTPc_CONN_OBJ  *HTTPcMem_ConnGet     (       HTTPc_MEM_ERR  *p_err);

void             HTTPcMem_ConnRelease (       HTTPc_CONN_OBJ  *p_conn,
                                              HTTPc_MEM_ERR   *p_err);

CPU_CHAR        *HTTPcMem_BufGet      (       HTTPc_MEM_ERR   *p_err);

void             HTTPcMem_BufRelease  (       CPU_CHAR        *p_buf,
                                              HTTPc_MEM_ERR   *p_err);

HTTPc_REQ_OBJ   *HTTPcMem_ReqGet      (       HTTPc_MEM_ERR   *p_err);

void             HTTPcMem_ReqRelease  (       HTTPc_REQ_OBJ   *p_req,
                                              HTTPc_MEM_ERR   *p_err);

HTTPc_RESP_OBJ  *HTTPcMem_RespGet     (       HTTPc_MEM_ERR   *p_err);

void             HTTPcMem_RespRelease (       HTTPc_RESP_OBJ  *p_resp,
                                              HTTPc_MEM_ERR   *p_err);


/*
*********************************************************************************************************
*********************************************************************************************************
*                                          CONFIGURATION ERRORS
*********************************************************************************************************
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*********************************************************************************************************
*                                             MODULE END
*********************************************************************************************************
*********************************************************************************************************
*/

#endif  /* HTTPc_MEM_MODULE_EN       */
#endif  /* HTTPc_MEM_MODULE_PRESENT  */
